package source

import (
	"context"
	"encoding/json"

	"github.com/anydev/simple_gin/pkg/config/encoder"
)

// 配置源选项
// 配置源选项包含编码器和上下文
type Options struct {
	// Encoder 编码器
	Encoder encoder.Encoder

	// Context 上下文
	Context context.Context
}

// 配置源选项函数
type Option func(o *Options)

// 新的配置源选项
// 新的配置源选项包含编码器和上下文
// 新的配置源选项可以通过选项函数设置
func NewOptions(opts ...Option) Options {
	options := Options{
		Encoder: json.NewEncoder(),
		Context: context.Background(),
	}

	for _, o := range opts {
		o(&options)
	}

	return options
}

// 配置源选项：编码器
// 配置源选项：编码器可以设置配置源的编码器
// 配置源选项：编码器默认值为json编码器
// 配置源选项：编码器可以设置为其他编码器，如yaml编码器
func WithEncoder(e encoder.Encoder) Option {
	return func(o *Options) {
		o.Encoder = e
	}
}
